package com.itheima.d9_generics_attention;

import java.math.BigDecimal;
import java.util.ArrayList;

/**
 * 1、泛型是工作在编译阶段的，就是为了写代码的时候约束操作的数据类型，不需要我去强转。
 *  但是程序编译成class文件得时候，class文件中就不存在泛型了，那些<>所有标签都去除掉了，底层还是恢复成object类型来操作数据，这就是泛型擦除。
 *要用到反编译软件：XJad-class反编译工具
 */
public class Test {
    public static void main(String[] args) {
        // 目标：理解泛型的注意事项。
        // 1、泛型是工作在编译阶段的，就是为了写代码的时候约束操作的数据类型，不需要我去强转。
        // 但是程序编译成class文件得时候，class文件中就不存在泛型了，那些<>所有标签都去除掉了，底层还是恢复成object类型来操作数据，这就是泛型擦除。
        ArrayList<String> list = new ArrayList<>();   //ArrayList集合本身就是个泛型类
        list.add("java1");
        list.add("java2");
        list.add("java3");
        String rs = list.get(2);     // String rs = (String)list.get(2); 底层是这样的，强转object类型数据来帮你处理数据
        System.out.println(rs);

        // 2、泛型不支持基本数据类型，只能支持对象类型（引用数据类型）。
//        ArrayList<int> list1 = new ArrayList<>();  报错
//        ArrayList<double> list2 = new ArrayList<>();
        ArrayList<Integer> list1 = new ArrayList<>();
        list1.add(12);

        ArrayList<Double> list2 = new ArrayList<>();
        list2.add(23.3);

        double a = 0.1;
        double b = 0.2;
        double c = a + b;
        System.out.println(a);
        BigDecimal a1 = new BigDecimal(0.1);
    }
}
